package tools

import (
	"encoding/csv"
	"fmt"
	"os"
)

// ReadCsv 读取csv数据 参数: fullFilePath 完整csv文件信息 返回值: 表头数组 ; 二维内容数组
// 例如 a,b := ReadCsv("runtime/tag_202407191453.csv")
func ReadCsv(fullFilePath string) ([]string, [][]string) {
	// 打开这个 csv 文件
	file, err := os.Open(fullFilePath)
	if err != nil {
		fmt.Println(err)
		return nil, nil
	}
	defer func(file *os.File) {
		err := file.Close()
		if err != nil {
			fmt.Println(err)
			return
		}
	}(file)

	// 初始化一个 csv reader，并通过这个 reader 从 csv 文件读取数据
	reader := csv.NewReader(file)
	// 设置返回记录中每行数据期望的字段数，-1 表示返回所有字段
	reader.FieldsPerRecord = -1
	// 通过 readAll 方法返回 csv 文件中的所有内容
	record, err := reader.ReadAll()
	if err != nil {
		panic(err)
	}
	headerList := make([]string, 0)
	contentList := make([][]string, 0)

	// 遍历从 csv 文件中读取的所有内容
	for index, item := range record {
		if index == 0 {
			for _, iv := range item {
				headerList = append(headerList, iv)
			}
		} else {
			dataList := make([]string, 0)
			for _, iv := range item {
				dataList = append(dataList, iv)
			}

			contentList = append(contentList, dataList)
		}
	}
	return headerList, contentList
}
